home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacTech 1 to 12
/
MacTech-vol-1-12.toast
/
Reference
/
the cmsp digests ('94-'97)
/
csmp digest Vol 3 No 138
< prev
next >
Wrap
Text File
|
1996-03-23
|
52KB
|
1,428 lines
C.S.M.P. Digest Wed, 28 Feb 96 Volume 3 : Issue 138
Today's Topics:
Can't sync up to VBL...
Confused about MDEF!
CopyBits, SetGWorld, and Everything (tm)
Drag & Drop and Trash
Drag Manager: How to have custom clippings
Idle time
KanjiTalk ignores GNEFilters?
[ANN] GC 4.9 for MacOS
[ANN] Visit Mac Games Programmers' Bitstop!
The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
(pottier@clipper.ens.fr).
The digest is a collection of article threads from the internet
newsgroups comp.sys.mac.programmer.help, csmp.tools, csmp.misc and
csmp.games. It is designed for people who read news semi-regularly and
want an archive of the discussions. If you don't know what a
newsgroup is, you probably don't have access to it. Ask your systems
administrator(s) for details. If you don't have access to news, you
may still be able to post messages to the group by using a mail server
like anon.penet.fi (mail help@anon.penet.fi for more information).
Each issue of the digest contains one or more sets of articles (called
threads), with each set corresponding to a 'discussion' of a particular
subject. The articles are not edited; all articles included in this digest
are in their original posted form (as received by our news server at
nef.ens.fr). Article threads are not added to the digest until the last
article added to the thread is at least two weeks old (this is to ensure that
the thread is dead before adding it to the digest). Article threads that
consist of only one message are generally not included in the digest.
The digest is officially distributed by two means, by email and ftp.
If you want to receive the digest by mail, send email to listserv@ens.fr
with no subject and one of the following commands as body:
help Sends you a summary of commands
subscribe csmp-digest Your Name Adds you to the mailing list
signoff csmp-digest Removes you from the list
Once you have subscribed, you will automatically receive each new
issue as it is created.
The official ftp info is ftp://ftp.dartmouth.edu/pub/csmp-digest.
Questions related to the ftp site should be directed to
scott.silver@dartmouth.edu.
-------------------------------------------------------
>From Mikael <mikael@resus.univ-mrs.fr>
Subject: Can't sync up to VBL...
Date: 10 Feb 1996 23:57:11 GMT
Organization: Association Resus
Hi all.
Here is my problem:
I've been trying to sync up my code to the VBL of the screen and so far, I've
succeeded only on one of my friend's 630. But on my 7200, it just won't work...
What I'm doing is to use SlotVInstall after finding out the slot number of my
screen, and giving it a pointer to my procedure, the one that is to be called
for each of the screen's VBL. It'works just fine on the 630, but it seems that
I'm missing something about the way you give a ProcPtr to the system on a
Powermac... (note that it doesn't even work when trying to do that with the
vanilla 60 Hz VBL queue). All I have as a documentation is a 1992 version of
Think Reference, and it doesn't explain what changed in the system with the
Powermac (obviously... the powermac didn't exist at that time...). I've been
peeking in CodeWarrior's header files to try to figure it out, but I don't know
anything about the different flavors of UPP's, and I just can't get the system
to call my procs without crashing.
Think Reference also explains how you should save and restore the A5 register
to allow your proc to acces your application's global variables, but I don't
know how you fit that to the powermac...
And last thing, I've also been trying to play real-time generated sound using
SndPlayDoubleBuffer. But here again, I can't pass the informations about my
callback procedure to the system in a working way (here, the first buffer plays
well and then the whole thing crashes when the system tries to call my proc).
I hope someone can help me on these ones because I think I won't figure them
out on my own...
Thanks in advance.
Mikael Bouillot (mikael@resus.univ-mrs.fr)
+++++++++++++++++++++++++++
>From John Burch
Date: 11 Feb 1996 22:31:29 GMT
Organization: ProAccess Systems Inc.
In article <4fjbcn$39n@bias.ipc.uni-tuebingen.de>, mikael@resus.univ-mrs.fr says...
>
>Hi all.
>
> Here is my problem:
> I've been trying to sync up my code to the VBL of the screen and so far, I've
>succeeded only on one of my friend's 630. But on my 7200, it just won't work...
> What I'm doing is to use SlotVInstall after finding out the slot number of my
>screen, and giving it a pointer to my procedure, the one that is to be called
>for each of the screen's VBL. It'works just fine on the 630, but it seems that
>I'm missing something about the way you give a ProcPtr to the system on a
>Powermac... (note that it doesn't even work when trying to do that with the
>vanilla 60 Hz VBL queue). All I have as a documentation is a 1992 version of
>Think Reference, and it doesn't explain what changed in the system with the
>Powermac (obviously... the powermac didn't exist at that time...). I've been
>peeking in CodeWarrior's header files to try to figure it out, but I don't know
>anything about the different flavors of UPP's, and I just can't get the system
>to call my procs without crashing.
>
> Think Reference also explains how you should save and restore the A5 register
>to allow your proc to acces your application's global variables, but I don't
>know how you fit that to the powermac...
>
> And last thing, I've also been trying to play real-time generated sound using
>SndPlayDoubleBuffer. But here again, I can't pass the informations about my
>callback procedure to the system in a working way (here, the first buffer plays
>well and then the whole thing crashes when the system tries to call my proc).
>
>
> I hope someone can help me on these ones because I think I won't figure them
>out on my own...
>
> Thanks in advance.
>
> Mikael Bouillot (mikael@resus.univ-mrs.fr)
>
Mikael,
This code works fine on a 7100 PPC - it's standard code from Apple I think.
Maybe there's a problem with the code that
is called by the VBL. Hope it helps.
OSErr InstallVBL ()
{
long anErr;
Str255 Temp;
short MainSlotNumber, mainDeviceRefNum;
gMyVBLRec.myVBLTask.qType = vType;
gMyVBLRec.myVBLTask.vblAddr = (ProcPtr) DoVBL;// address of task
gMyVBLRec.myVBLTask.vblCount = kInterval; // Set the interval
gMyVBLRec.vblA5 = (long) CurrentA5; // Save app's A5 in structure
mainDeviceRefNum = (**GetMainDevice()).gdRefNum;
MainSlotNumber = (**(AuxDCEHandle)GetDCtlEntry(mainDeviceRefNum)).dCtlSlot;
anErr = SlotVInstall ((QElemPtr) &gMyVBLRec.myVBLTask, MainSlotNumber);
return anErr;
}
void DoVBL()
{
long curA5;
VBLRecPtr recPtr;
recPtr = (VBLRecPtr) GetVBLRec ();
curA5 = SetA5 (recPtr->vblA5);// read app A5 from structure and save
// current value of A5
// ... now that it's OK to access application variables, do the task ...
fastDraw(recPtr);
// Reset vblCount so that this procedure executes again
recPtr->myVBLTask.vblCount = kInterval;
curA5 = SetA5(curA5);
}
John
+++++++++++++++++++++++++++
>From henry_van_tunen@mindlink.bc.ca (Henry van Tunen)
Date: 12 Feb 1996 06:15:23 GMT
Organization: Motionworks Group Limited
In article <4fjbcn$39n@bias.ipc.uni-tuebingen.de>, Mikael
<mikael@resus.univ-mrs.fr> wrote:
> Hi all.
>
> Here is my problem:
> I've been trying to sync up my code to the VBL of the screen and so far, I've
> succeeded only on one of my friend's 630. But on my 7200, it just won't
work...
> What I'm doing is to use SlotVInstall after finding out the slot number of my
> screen, and giving it a pointer to my procedure, the one that is to be called
> for each of the screen's VBL. It'works just fine on the 630, but it seems that
> I'm missing something about the way you give a ProcPtr to the system on a
> Powermac... (note that it doesn't even work when trying to do that with the
> vanilla 60 Hz VBL queue). All I have as a documentation is a 1992 version of
> Think Reference, and it doesn't explain what changed in the system with the
> Powermac (obviously... the powermac didn't exist at that time...). I've been
> peeking in CodeWarrior's header files to try to figure it out, but I
don't know
> anything about the different flavors of UPP's, and I just can't get the system
> to call my procs without crashing.
>
> Think Reference also explains how you should save and restore the A5 register
> to allow your proc to acces your application's global variables, but I don't
> know how you fit that to the powermac...
>
Hi Mikael,
I can answer the VBL stuff... The following code will set a flag that
your main program loop can test to see if it is time to draw. The flag
gets set in a VBL task (you can't do much else there since VBL's can't
move memory). This code will work for 68K, 68K CFM, and PowerPC.
typedef struct MyVBL
{
VBLTask vbl;
Boolean timeToDraw;
} MyVBL;
MyVBL gVBL;
void StartVBL( void )
{
gVBL.vbl.qType = vType;
gVBL.vbl.vblAddr = NewVBLProc( MyVBLTask );
gVBL.vbl.vblCount = 1;
gVBL.vbl.vblPhase = 0;
gVBL.timeToDraw = false;
SlotVInstall( ( QElemPtr ) &gVBL, gTheSlot );
}
#if GENERATINGCFM
pascal void MyVBLTask( VBLTaskPtr pVBL )
#else
#pragma parameter MyVBLTask( __A0 )
pascal void MyVBLTask( VBLTaskPtr pVBL )
#endif
{
MyVBL* pMyVBL = ( MyVBL* ) pVBL;
pVBL.vbl.vblCount = 1; // keep VBL alive
pVBL.timeToDraw = true; // it's time to draw
}
In you idle loop you can check "gVBL.timeToDraw" to see if you should
update your window. Eg:
void MyIdle( void )
{
gVBL.timeToDraw = false; // wait for next retrace
while( ! gVBL.timeToDraw )
;
CopyBits( ... ); // draw everything
}
Hope this helps,
--
Hank van Tunen
Senior Geek - Motion Works Group Limited.
hankvt@mwg.com
+++++++++++++++++++++++++++
>From bwade@qualia.com (Bretton Wade)
Date: Tue, 13 Feb 1996 11:26:44 -0500
Organization: qualia, inc.
In article <4fjbcn$39n@bias.ipc.uni-tuebingen.de>, Mikael
<mikael@resus.univ-mrs.fr> wrote:
# Think Reference also explains how you should save and restore the A5 register
# to allow your proc to acces your application's global variables, but I don't
# know how you fit that to the powermac...
you don't need to do this on a PowerMac, also, be sure you are using the
macro to generate a callback record... it looks like this (this is
butchered out of my own code, so forgive if I missed something):
//-----------------------------------------------------------------
int gTick = 0;
VBLTask gVBLTask;
//-----------------------------------------------------------------
pascal void MyDoVBL (VBLTaskPtr rec)
{
gTick++;
rec->vblCount = 1;
}
//-----------------------------------------------------------------
void InstallVBL (void)
{
GDHandle device = GetMainDevice ();
int slotNum =
(* AuxDCEHandle (GetDCtlEntry((*device)->gdRefNum)))->dCtlSlot;
gVBLTask.qType = vType;
gVBLTask.vblAddr = NewVBLProc (MyDoVBL);
gVBLTask.vblCount = 1;
gVBLTask.vblPhase = 0;
SlotVInstall ((QElemPtr) &gVBLTask, slotNum);
}
//-----------------------------------------------------------------
--
bwade@qualia.com
http://www.qualia.com/
---------------------------
>From Hugh Kawahara <kawahara@leland.stanford.edu>
Subject: Confused about MDEF!
Date: 11 Feb 1996 07:40:38 GMT
Organization: Stanford Univ.
Hi all! It's late Saturday evening.
Recently, I wrote a custom menu def. resource MDEF.
I intended to use it as a pop-up menu.
The program starts like
pascal void main(short message, MenuHandle theMenu,
Rect *menuRect, Point hitPt, short *whichItem).
When the MDEF receives "mPopUpMsg" in the "message" parameter,
the "hitPt" parameter is supposed to contain the top-left coordinate
of the pop-up box. (This is almost a excerption from IM).
But my MDEF drew the menu at a wrong position.
I scratched my head for a while, then I swapped the hitPt.h and hitPt.v,
i.e. I used the hitPt.h as the top and hitPt.v as the left coordinate.
Surprisingly, it fixed the problem.
What did I do wrong this time?
Also, IM doesn't say anything about "mDrawItemMsg" and "mCalcItemMsg".
I was fortunate enough to find it out.
But, how can you find these "hidden" informations?
Hugh
+++++++++++++++++++++++++++
>From hawkfish@punchdeck.com (Richard Wesley)
Date: Mon, 12 Feb 1996 10:01:32 -0800
Organization: Punch Deck Consulting
In article <4fk6hm$s56@nntp.Stanford.EDU>, Hugh Kawahara
<kawahara@leland.stanford.edu> wrote:
>Hi all! It's late Saturday evening.
>Recently, I wrote a custom menu def. resource MDEF.
>I intended to use it as a pop-up menu.
>The program starts like
> pascal void main(short message, MenuHandle theMenu,
> Rect *menuRect, Point
hitPt, short *whichItem).
>When the MDEF receives "mPopUpMsg" in the "message" parameter,
>the "hitPt" parameter is supposed to contain the top-left coordinate
>of the pop-up box. (This is almost a excerption from IM).
>But my MDEF drew the menu at a wrong position.
>I scratched my head for a while, then I swapped the hitPt.h and hitPt.v,
>i.e. I used the hitPt.h as the top and hitPt.v as the left coordinate.
>Surprisingly, it fixed the problem.
>What did I do wrong this time?
>
>Also, IM doesn't say anything about "mDrawItemMsg" and "mCalcItemMsg".
>I was fortunate enough to find it out.
>But, how can you find these "hidden" informations?
This is a known bug. I forget where its documented, but its one of those
things that they couldn't change, so we're all stuck with remembering
it...
- rmgw
http://www.punchdeck.com/hawkfish/PunchDeck.html
- --------------------------------------------------------------------------
Richard Wesley | "I don't know about your dreams
hawkfish@punchdeck.com | But mine are sort of hackneyed"
hawkfish@electricfish.com | - Laurie Anderson, "Talk Normal"
- --------------------------------------------------------------------------
+++++++++++++++++++++++++++
>From lorenw@rwp.mv.com (Loren Wright)
Date: Tue, 13 Feb 1996 15:35:51 GMT
Organization: Roger Wagner Publishing
> In article <4fk6hm$s56@nntp.Stanford.EDU>, Hugh Kawahara
> <kawahara@leland.stanford.edu> wrote:
> >Also, IM doesn't say anything about "mDrawItemMsg" and "mCalcItemMsg".
> >I was fortunate enough to find it out.
> >But, how can you find these "hidden" informations?
I make a habit of looking at the header files. Sometimes they have stuff
that's either missing or unclear from IM.
+++++++++++++++++++++++++++
>From gurgle@apple.com (Pete Gontier)
Date: Tue, 13 Feb 1996 14:10:29 -0800
Organization: Apple Computer, Inc.
In article <4fk6hm$s56@nntp.Stanford.EDU>,
Hugh Kawahara <kawahara@leland.stanford.edu> wrote:
> Also, IM doesn't say anything about "mDrawItemMsg" and "mCalcItemMsg".
> I was fortunate enough to find it out.
> But, how can you find these "hidden" informations?
These messages are only generated by the System 7 Popup CDEF. If you are
handling popup menus yourself, then your MDEF need not worry about these
messages, because the Menu Manager will never generate them.
If you are using, or plan to use, the popup CDEF, then you should handle
these messages. Unfortunately, we have never released sample code to do
this, but it shouldn't be too hard.
The MDEF gets called the same way for both messages:
The message parameter is the message.
The theMenu parameter is the MenuHandle.
The menuRect parameter is the Rect to draw in. For mCalcItemMsg, this
will be an empty Rect and should be filled in by the MDEF. For
mDrawItemMsg it will be the Rect to draw in.
The hitPt parameter is just the topLeft for the Rect.
The whichItem parameter is the item to display.
The only thing that looks tricky about mCalcItemMsg is that the first
thing it does is call _CalcMenuSize. It calls _CalcMenuSize rather then
calling its internal function to do the same thing because the popup CDEF
installs a mini-MDEF that overrides to result of the mSizeMsg calculation
to adjust for the extra width of the downward pointing arrow. If you
bypass that then the menu won't be sized correctly.
mDrawItemMsg simply calls through to the same code that draws individual
items for the menu itself.
- ---------
Pete Gontier, Integer Poet, Apple Macintosh Developer Technical Support
work mail <mailto:gurgle@apple.com>
personal mail <mailto:gurgle@ccnet.com>
personal web <http://www.ccnet.com/~gurgle>
work web <http://dev.info.apple.com/dts.html>
---------------------------
>From chad@pengar.com (Chad Leigh @ The Electronic GunShop)
Subject: CopyBits, SetGWorld, and Everything (tm)
Date: Tue, 06 Feb 1996 03:05:42 -0700
Organization: Pengar Enterprises, Inc.
Hi All
I have a quick question:
I whipped up a quick program over the weekend and ran into some questions.
My program has 3 offscreen GWorlds and a Window for final display. I
develoepd it on a PPC using MW CW 8.0 (straight C). I compiled both PPC
and 68K versions and both ran fine on the PPC (7.5.2).
I moved the 68K version to my brothers IIsi (7.1) and it didn't work right
in some places.
The program uses CopyBits from the GWorlds to other Gworlds and to the
Window on-screen.
That is the background.
Now the questions:
1. Is it necessary to do a SetGWorld to the *destination*
Gworld/CGrafport before doing the CopyBits? NIM:ImagQDraw (IQD) seems
to imply that you need to do this. (at least for the window). Looking at
the examples in NIM:IQD they do this. But after having troubles on the
IIsi, and then looking at example code, like in the "Tricks of the Mac
Game Programming Gurus", they do lots of CopyBits without ever Setting any
port (equivalent) that I could tell. Looking at various example in
different places, some do it and some don't.
After setting the gworld (SetGWorld) my code now works on the IIsi (it
always worked on the PPC). (I do some simple animations as pieces move on
a field and the piece on the PPC would move nicely in a slide to its next
position -- on the IIsi it would hesitate for a second and then jump to
its new position. (The hesitation was the "sliding" loop but it didn't
show up on the screen. Now it all works on both machines).
2. LockPixels() -- NIM says that you need to do this before doing a
CopyBits into or from a GWorld (NIM:IQD 6-9 -- 4th paragraph down). Lots
of examples don't. I always have but after seeing others not I am
wondering?
Is setting the NoPurge (default) flag in the NewGWorld call enough to not
have to do this? I ask because NIM:IQD does NOT make this qualification
and also because maybe there is a technical difference between "purging
(out of memory)" and merely "moving" the base address.
+++++++++++++++++++++++++++
>From "Andrew C. Plotkin" <erkyrath+@CMU.EDU>
Date: Tue, 6 Feb 1996 12:02:56 -0500
Organization: Carnegie Mellon, Pittsburgh, PA
chad@pengar.com (Chad Leigh @ The Electronic GunShop) writes:
> I whipped up a quick program over the weekend and ran into some questions.
>
> My program has 3 offscreen GWorlds and a Window for final display. I
> develoepd it on a PPC using MW CW 8.0 (straight C). I compiled both PPC
> and 68K versions and both ran fine on the PPC (7.5.2).
>
> I moved the 68K version to my brothers IIsi (7.1) and it didn't work right
> in some places.
>
> The program uses CopyBits from the GWorlds to other Gworlds and to the
> Window on-screen.
>
> That is the background.
>
> Now the questions:
>
> 1. Is it necessary to do a SetGWorld to the *destination*
> Gworld/CGrafport before doing the CopyBits? NIM:ImagQDraw (IQD) seems
> to imply that you need to do this. (at least for the window). Looking at
> the examples in NIM:IQD they do this. But after having troubles on the
> IIsi, and then looking at example code, like in the "Tricks of the Mac
> Game Programming Gurus", they do lots of CopyBits without ever Setting any
> port (equivalent) that I could tell. Looking at various example in
> different places, some do it and some don't.
Yes, it is necessary. If the destination of the CopyBits has a
graphics device which is different from the one which is currently set
by SetGWorld(), you can get color or speed problems.
> 2. LockPixels() -- NIM says that you need to do this before doing a
> CopyBits into or from a GWorld (NIM:IQD 6-9 -- 4th paragraph down). Lots
> of examples don't. I always have but after seeing others not I am
> wondering?
It's like locking any other handle. Maybe you can get away with not
locking it before you use it. Then one day you (or your user) finds a
sequence of actions which causes a memory allocation, and suddenly
you're writing to an invalid pointer. Crash bang.
> Is setting the NoPurge (default) flag in the NewGWorld call enough to not
> have to do this? I ask because NIM:IQD does NOT make this qualification
> and also because maybe there is a technical difference between "purging
> (out of memory)" and merely "moving" the base address.
No. There *is* a difference between purging a handle and leaving it
unlocked. You pretty much stated it: if it's got the nopurge flag, it
will never actually be deleted, but it still may be moved, unless you
LockPixels() it.
--Z
"And Aholibamah bare Jeush, and Jaalam, and Korah: these were the borogoves..."
+++++++++++++++++++++++++++
>From MMMGuild@aol.com (Bill Catambay)
Date: Tue, 06 Feb 1996 09:28:59 -0800
Organization: Marathon Map Makers Guild
In article <chad-0602960305420001@sverige.pengar.com>, chad@pengar.com
(Chad Leigh @ The Electronic GunShop) wrote:
> Hi All
>
> I have a quick question:
>
>
> 1. Is it necessary to do a SetGWorld to the *destination*
> Gworld/CGrafport before doing the CopyBits?
Yes, you need to SetGWorld to destination GWorld, and/or SetPort to
destination GrafPort.
>
>
> 2. LockPixels() -- NIM says that you need to do this before doing a
> CopyBits into or from a GWorld (NIM:IQD 6-9 -- 4th paragraph down). Lots
> of examples don't. I always have but after seeing others not I am
> wondering?
>
With GWorlds, yes, you should lock the pixels. You have to do this
because a GWorld actually holds its pixel map in a handle rather than a
pointer. LockPixels makes sure the pixel map doesn't move. You should lock
a GWorld's pixels before drawing to or copying from the GWorld (and unlock
them afterward).
_____________________________________________________________________
Bill Catambay
Pascal Programmer on Macintosh and Open VMS
/>
// The purpose of software engineering
(//////[O]>=========================================-
\\ is to manage complexity, not to create it.
\>
____________________________________________________________________
Marathon lovers: Check out Devil in a Blue Dress, a 20-level custom map scenario with new story and plots.
+++++++++++++++++++++++++++
>From phixus@deltanet.com (Chris De Salvo)
Date: Tue, 06 Feb 1996 21:44:38 -0800
Organization: MacPlay
In article <chad-0602960305420001@sverige.pengar.com>, chad@pengar.com
(Chad Leigh @ The Electronic GunShop) wrote:
>1. Is it necessary to do a SetGWorld to the *destination*
>Gworld/CGrafport before doing the CopyBits? NIM:ImagQDraw (IQD) seems
>to imply that you need to do this. (at least for the window). Looking at
>the examples in NIM:IQD they do this. But after having troubles on the
>IIsi, and then looking at example code, like in the "Tricks of the Mac
>Game Programming Gurus", they do lots of CopyBits without ever Setting any
>port (equivalent) that I could tell. Looking at various example in
>different places, some do it and some don't.
CopyBits() uses the current grafport (in this case a GWorld) to
determine clipping and other such info when transfering bits. As such,
you should do a SetGWorld() to the destination before blitting.
>2. LockPixels() -- NIM says that you need to do this before doing a
>CopyBits into or from a GWorld (NIM:IQD 6-9 -- 4th paragraph down). Lots
>of examples don't. I always have but after seeing others not I am
>wondering?
>
>Is setting the NoPurge (default) flag in the NewGWorld call enough to not
>have to do this? I ask because NIM:IQD does NOT make this qualification
>and also because maybe there is a technical difference between "purging
>(out of memory)" and merely "moving" the base address.
My feeling on this is that since the pixels are held in a handle-based
data structure, they could be relocated in RAM during a Memory Manager
operation. CopyBits() could cause memory to be moved. Who knows when
this could happen. The NoPurge flag will keep them from being cleared
from RAM, but won't stop them from moving. It would be bad for the bits
to move in the middle of a blit. I would recommend having your pixels
locked.
If those three GWorlds aren't being resized or anything during the life of
your program, just lock them right after you allocate them, and unlock
before you free them. That way you don't have to worry about them.
Assuming that you do this early on in your program, they should be in a
friendly place in the heap.
L8R
Chris
--
phixus@deltanet.com | Macintosh: Changing the world,
Chris De Salvo | one person at a time!
Professional Mac Geek | -----------------------------
for MacPlay, Inc. | (I wish they'd hurry up!)
http://www.deltanet.com/users/phixus
+++++++++++++++++++++++++++
>From KNEworley@aol.com (Kenneth Worley)
Date: Wed, 14 Feb 1996 09:12:21 -0700
Organization: The Computer Den, Inc. Evanston WY
In article <chad-0602960305420001@sverige.pengar.com>, chad@pengar.com
(Chad Leigh @ The Electronic GunShop) wrote:
> 1. Is it necessary to do a SetGWorld to the *destination*
> Gworld/CGrafport before doing the CopyBits? NIM:ImagQDraw (IQD) seems
> to imply that you need to do this. (at least for the window). Looking at
> the examples in NIM:IQD they do this. But after having troubles on the
> IIsi, and then looking at example code, like in the "Tricks of the Mac
> Game Programming Gurus", they do lots of CopyBits without ever Setting any
> port (equivalent) that I could tell. Looking at various example in
> different places, some do it and some don't.
>
> After setting the gworld (SetGWorld) my code now works on the IIsi (it
> always worked on the PPC). (I do some simple animations as pieces move on
> a field and the piece on the PPC would move nicely in a slide to its next
> position -- on the IIsi it would hesitate for a second and then jump to
> its new position. (The hesitation was the "sliding" loop but it didn't
> show up on the screen. Now it all works on both machines).
Looks like you answered your own question. I always understood that you do,
in fact, have to set the destination port before doing a CopyBits. In fact,
the destination port's fore and background colors affect the CopyBits
operation.
> 2. LockPixels() -- NIM says that you need to do this before doing a
> CopyBits into or from a GWorld (NIM:IQD 6-9 -- 4th paragraph down). Lots
> of examples don't. I always have but after seeing others not I am
> wondering?
>
> Is setting the NoPurge (default) flag in the NewGWorld call enough to not
> have to do this? I ask because NIM:IQD does NOT make this qualification
> and also because maybe there is a technical difference between "purging
> (out of memory)" and merely "moving" the base address.
NoPurge just keeps the relocatable block from being let go. It doesn't do
anything to actually lock the BitMap in place. Even though CopyBits will
work a lot of times when you don't lock the pixels, there are always a
few circumstances where it won't. I always understood though that you only
need to lock the pixels of the GWorld you're copying FROM. Anyone else know
if that's correct or not?
- ---------------------------------------------------
Kenneth Worley
KNEworley@aol.com
- ---------------------------------------------------
---------------------------
>From lockheimer@twics.com (Hiroshi Lockheimer)
Subject: Drag & Drop and Trash
Date: Sun, 04 Feb 1996 05:18:34 +0900
Organization: Twics Co. Ltd., Japan
Hi all:
I'm wondering if there's any code on how to determine if something has
been dragged into the trash.
Basically, I want the user to be able to drag some list items (as in the
List Manager) around, and if the user wants to delete the item, dropping
it into the trash would do the job (Anarchie and Netscape both do this).
So far I have it working by installing a custom DragSendProc and
determining inside this proc (via GetDropLocation, etc.) if the user
dragged into the trash and if so, deleting the current selection from my
list. HOWEVER, I can't for the life of me figure out how to get the Drag
Manager _not_ to do the "zoom" effect back from the trash to where the
deleted item used to be.
Do I have to write a custom drawing proc to bypass the "zoom"? Any hints?
TIA,
Hiroshi Lockheimer
+++++++++++++++++++++++++++
>From Carl R. Osterwald <carl_osterwald@nrel.gov>
Date: 7 Feb 1996 16:51:11 GMT
Organization: National Renewable Energy Laboratory
In article <lockheimer-0402960518340001@b16.dial.twics.com> Hiroshi
Lockheimer, lockheimer@twics.com writes:
>I'm wondering if there's any code on how to determine if something has
>been dragged into the trash.
Here's a bit of code that I use:
Boolean drop_pos_is_trash (DragReference drag_ref)
{
Boolean result = false;
Boolean changed;
AEDesc drop_location;
AliasHandle drop_alias;
FSSpec drop_file_spec;
FSSpec trash_file_spec;
short trash_vRefNum;
long trash_dirID;
if ( GetDropLocation(drag_ref, &drop_location) == noErr )
{
drop_alias = (AliasHandle)drop_location.dataHandle;
if (
drop_location.descriptorType == typeAlias &&
ResolveAlias( nil,
drop_alias,
&drop_file_spec,
&changed) == noErr &&
FindFolder( kOnSystemDisk,
kTrashFolderType,
kDontCreateFolder,
&trash_vRefNum,
&trash_dirID) == noErr &&
FSMakeFSSpec( trash_vRefNum,
trash_dirID,
nil,
&trash_file_spec) == noErr &&
equal_file_specs(&trash_file_spec, &drop_file_spec)
)
result = true;
AEDisposeDesc(&drop_location);
}
return(result);
}
Boolean equal_file_specs (FSSpec *file1, FSSpec *file2)
{
return
IUEqualString(file1->name, file2->name) == 0 &&
file1->vRefNum == file2->vRefNum &&
file1->parID == file2->parID;
}
+++++++++++++++++++++++++++
>From gurgle@dnai.com (Pete Gontier)
Date: Sat, 10 Feb 1996 12:57:47 -0800
Organization: Cellular
In article <lockheimer-0402960518340001@b16.dial.twics.com>,
lockheimer@twics.com (Hiroshi Lockheimer) wrote:
> I'm wondering if there's any code on how to determine if something has
> been dragged into the trash.
> So far I have it working by installing a custom DragSendProc and
> determining inside this proc (via GetDropLocation, etc.) if the user
> dragged into the trash and if so, deleting the current selection from my
> list. HOWEVER, I can't for the life of me figure out how to get the Drag
> Manager _not_ to do the "zoom" effect back from the trash to where the
> deleted item used to be.
Add data to your drag item of type 'promiseHFS'. (I don't have headers
lying around at the moment, so you'll have to search in <Drag.h> for that
sub-string to get the real constant.) Implement the whole ritual for that
data flavor as documented in Drag Manager Programmer's Guide. You may or
may not actually have to create a file in the trash to satisfy Finder and
Drag Manager that you've done the right thing. If you do have to create
the file, simply delete it right after TrackDrag returns. (Its FSSpec will
still be in the drag reference.)
NewsWatcher may or may not do it this way, but it's easy to check.
- -----------------------------
Pete Gontier -- Apple Macintosh Developer Technical Support
<URL:mailto:gurgle@dnai.com> -- <URL:http://www.dnai.com/~gurgle>
+++++++++++++++++++++++++++
>From ari@shore.net (Ari Halberstadt)
Date: Sun, 11 Feb 1996 23:52:10 -0400
Organization: Shore.Net/Eco Software, Inc; (info@shore.net)
In article <gurgle-1002961257470001@dynamic-223.dnai.com>, gurgle@dnai.com
(Pete Gontier) wrote:
>In article <lockheimer-0402960518340001@b16.dial.twics.com>,
>lockheimer@twics.com (Hiroshi Lockheimer) wrote:
>
> > I'm wondering if there's any code on how to determine if something has
> > been dragged into the trash.
> > So far I have it working by installing a custom DragSendProc and
> > determining inside this proc (via GetDropLocation, etc.) if the user
> > dragged into the trash and if so, deleting the current selection from my
> > list. HOWEVER, I can't for the life of me figure out how to get the Drag
> > Manager _not_ to do the "zoom" effect back from the trash to where the
> > deleted item used to be.
>
There's another way to detect a drag to trash. This is hacked out of some
C code. I'm not sure about how to disable the zoom effect.
...
/* track the drag */
err = TrackDrag(drag, &event, dragRgn);
if (err != dragNotAcceptedErr && err != userCanceledErr) {
ThrowIfOSError(err);
/* delete the selection if it was dropped onto a
destination to which the selection should be
moved instead of copied (i.e., to the trash) */
ThrowIfOSError(GetDragModifiers(drag, 0L, &mouseDownModifiers,
&mouseUpModifiers));
if ( (mouseDownModifiers & optionKey) == 0 &&
(mouseUpModifiers & optionKey) == 0 &&
DragTargetIsTrash(drag))
{
// delete the selection
}
}
...
/* üwsDragTargetIsTrash returns true if the target of the drag was the
trash.
Adapted from "DragText", by Rob Johnston, part of the Drag Manager sample
code from Apple. */
wstBoolean wsDragTargetIsTrash(DragReference drag)
{
AEDesc targetDesc;
AEDesc targetDescSpec;
FSSpec targetSpec;
CInfoPBRec targetPB;
short trashVRefNum;
long trashDirID;
wstBoolean trash;
wsTry {
/* Coerce the target descriptor to an FSSpec. If there's no target or it
can't be coerced into an FSSpec, then it couldn't have been the
Trash. */
trash = false;
wsThrowIfOSError(GetDropLocation(drag, &targetDesc));
if ( targetDesc.descriptorType != typeNull &&
AECoerceDesc(&targetDesc, typeFSS, &targetDescSpec) == noErr)
{
/* get the directory ID of the target */
targetSpec = *(FSSpec *) *targetDescSpec.dataHandle;
AEDisposeDesc(&targetDescSpec);
blkclr(&targetPB, sizeof(CInfoPBRec));
targetPB.dirInfo.ioNamePtr = targetSpec.name;
targetPB.dirInfo.ioVRefNum = targetSpec.vRefNum;
targetPB.dirInfo.ioDrDirID = targetSpec.parID;
ThrowIfOSError(PBGetCatInfoSync(&targetPB));
/* get the location of the trash folder */
if (MacHasFindFolder()) {
ThrowIfOSError(FindFolder(targetSpec.vRefNum,
kTrashFolderType, kCreateFolder,
&trashVRefNum, &trashDirID));
/* check if the target is the trash folder */
trash = (targetPB.dirInfo.ioVRefNum == trashVRefNum &&
targetPB.dirInfo.ioDrDirID == trashDirID);
}
}
} wsAlways {
AEDisposeDesc(&targetDesc);
} wsEndTry;
return(trash);
}
-- Ari Halberstadt (ari@shore.net, <http://www.shore.net/~ari/>)
Computer consulting, specializing in Macintosh software development.
+++++++++++++++++++++++++++
>From gurgle@apple.com (Pete Gontier)
Date: Tue, 13 Feb 1996 16:42:47 -0800
Organization: Apple Computer, Inc.
In article <4fal9v$5lv@nrel.nrel.gov>,
Carl R. Osterwald <carl_osterwald@nrel.gov> wrote:
> In article <lockheimer-0402960518340001@b16.dial.twics.com> Hiroshi
> Lockheimer, lockheimer@twics.com writes:
>
> >I'm wondering if there's any code on how to determine if something has
> >been dragged into the trash.
>
> Here's a bit of code that I use...
The sample looked OK except that it did not appear to handle the case of
dropping into a folder which itself was in the trash. Copying to myself as
a sample code idea.
---
Pete Gontier, Integer Poet, Apple Macintosh Developer Technical Support
work mail <mailto:gurgle@apple.com>
personal mail <mailto:gurgle@ccnet.com>
personal web <http://www.ccnet.com/~gurgle>
work web <http://dev.info.apple.com/dts.html>
+++++++++++++++++++++++++++
>From gurgle@apple.com (Pete Gontier)
Date: Tue, 13 Feb 1996 18:06:45 -0800
Organization: Apple Computer, Inc.
In article <lockheimer-0402960518340001@b16.dial.twics.com>,
lockheimer@twics.com (Hiroshi Lockheimer) wrote:
> I'm wondering if there's any code on how to determine if something has
> been dragged into the trash.
NewsWatcher does this (I just tested) and the source is available.
<ftp://ftp.acns.nwu.edu//pub/newswatcher/source-212.sea.hqx>
Also:
Dev.CD Jan 96 SDK1
Development Kits (Disc 1)
Macintosh Drag and Drop
Demo Applications
FinderDrag
---
Pete Gontier, Integer Poet, Apple Macintosh Developer Technical Support
work mail <mailto:gurgle@apple.com>
personal mail <mailto:gurgle@ccnet.com>
personal web <http://www.ccnet.com/~gurgle>
work web <http://dev.info.apple.com/dts.html>
---------------------------
>From michel@ellis.fdn.org (Michel Pollet)
Subject: Drag Manager: How to have custom clippings
Date: Wed, 07 Feb 1996 17:00:22 +0100
Organization: SAT Euronis
I would like to have custom drag manager clippings for the finder, or, at
least, a custom icon for identifying them. for the moment, I add a PICT
representation of the object, but that's not very usefull for the end
user.
Has anybody done that ? does anybody knowns how to make custom views in
the finder like, say, CyberFinder, or Desktop printer ?
Please copy any answer by mail to michel@ellis.fdn.org, my newsfeed is a
little erratic.
Michel
--
Michel Pollet, Macintosh developer
Email: michel@ellis.fdn.org Visio (H320) : (33) 144066328
+++++++++++++++++++++++++++
>From awiner@oracle.com (Adam Winer)
Date: Wed, 07 Feb 1996 17:04:32 -0800
Organization: Oracle Corporation
In article <michel-0702961700260001@194.98.3.103>, michel@ellis.fdn.org
(Michel Pollet) wrote:
> I would like to have custom drag manager clippings for the finder, or, at
> least, a custom icon for identifying them. for the moment, I add a PICT
> representation of the object, but that's not very usefull for the end
> user.
>
> Has anybody done that ? does anybody knowns how to make custom views in
> the finder like, say, CyberFinder, or Desktop printer ?
Save the clipping as an ordinary file. To do this, you'll want to use
the "PromiseHFSFlavor" flavor type; see the Drag Manager docs
for more info. Also, see the GetDropLocation() function; it'll let
you find where the file was dragged.
-- Adam Winer
awiner@us.oracle.com
+++++++++++++++++++++++++++
>From gurgle@apple.com (Pete Gontier)
Date: Wed, 14 Feb 1996 14:19:14 -0800
Organization: Apple Computer, Inc.
In article <michel-0702961700260001@194.98.3.103>,
michel@ellis.fdn.org (Michel Pollet) wrote:
> I would like to have custom drag manager clippings for the finder, or, at
> least, a custom icon for identifying them. for the moment, I add a PICT
> representation of the object, but that's not very usefull for the end
> user.
>
> Has anybody done that ? does anybody knowns how to make custom views in
> the finder like, say, CyberFinder, or Desktop printer ?
It's not possible to write a clipping extension at the moment. It's a
shame, because I would certainly like to see more (jpeg, tiff, gif, rtf,
etc.).
The best you're going to be able to do, as another poster noted, is
'flavorTypePromiseHFS', which allows you to create a regular document at
the drop target. There's a good sample of how this works in the Drag and
Drop SDK:
<ftp://ftp.info.apple.com/Apple.Support.Area/Developer_Services/
Development_Kits/Macintosh_Drag_-_Drop/
Macintosh_Drag_and_Drop.sit.hqx
You developer programs folk can go right to the sample without downloading
the whole SDK:
Dev.CD Jan 96 SDK1
Development Kits (Disc 1)
Macintosh Drag and Drop
Demo Applications
FinderDrag
I imagine the NewsWatcher source code demonstrates this well, too.
<ftp://ftp.acns.nwu.edu//pub/newswatcher/source-212.sea.hqx>
---
Pete Gontier, Integer Poet, Apple Macintosh Developer Technical Support
work mail <mailto:gurgle@apple.com>
personal mail <mailto:gurgle@ccnet.com>
personal web <http://www.ccnet.com/~gurgle>
work web <http://dev.info.apple.com/dts.html>
---------------------------
>From jhoos@orion.math.uiuc.edu (Jason Hoos)
Subject: Idle time
Date: 8 Feb 1996 07:42:31 GMT
Organization: University of Illinois at Urbana
Is there some simple way to tell from within C how long a Mac has
been idle for? If not, what's the complicated way? :)
--
/============/ Jason Hoos - jhoos@uiuc.edu \============\
/============/ USA-CERL Graduate Database Developer \============\
/============/ Math Department System Co-Administrator \============\
/============/ University of Illinois - Urbana-Champaign \============\
+++++++++++++++++++++++++++
>From phixus@deltanet.com (Chris De Salvo)
Date: Fri, 09 Feb 1996 04:23:01 -0800
Organization: MacPlay
In article <4fc9h7$mbb@vixen.cso.uiuc.edu>, jhoos@orion.math.uiuc.edu
(Jason Hoos) wrote:
>Is there some simple way to tell from within C how long a Mac has
>been idle for? If not, what's the complicated way? :)
If you define "idle" as having no mouse or keyboard activity then it's
pretty easy. Each time through your event loop just record the mouse
position. If it's the same as last time, the mouse hasn't moved. Easiest
way I've found for checking keyboard activity is to use GetKeys() and then
just memcmp() each new result to the last time.
If you want to go further and check for disk/network activity, etc., then
I have no clue.
L8R
Chris
--
phixus@deltanet.com | Macintosh: Changing the world,
Chris De Salvo | one person at a time!
Professional Mac Geek | -----------------------------
for MacPlay, Inc. | (I wish they'd hurry up!)
http://www.deltanet.com/users/phixus
+++++++++++++++++++++++++++
>From hvoth@cln.etc.bc.ca
Date: Tue, 13 Feb 1996 09:30:27 GMT
Organization: Education Technology Centre of B.C.
In article <phixus-0902960423010001@ana0012.deltanet.com>,
phixus@deltanet.com (Chris De Salvo) wrote:
> In article <4fc9h7$mbb@vixen.cso.uiuc.edu>, jhoos@orion.math.uiuc.edu
> (Jason Hoos) wrote:
>
> >Is there some simple way to tell from within C how long a Mac has
> >been idle for? If not, what's the complicated way? :)
>
> If you define "idle" as having no mouse or keyboard activity then it's
> pretty easy. Each time through your event loop just record the mouse
> position. If it's the same as last time, the mouse hasn't moved. Easiest
> way I've found for checking keyboard activity is to use GetKeys() and then
> just memcmp() each new result to the last time.
>
> If you want to go further and check for disk/network activity, etc., then
> I have no clue.
Use a jGNE filter INIT. Check for mouse location (as suggested above) and
for keydown events. If you want modifier keys, then you need to use
GetKeys.
I check for mouse location on idle events.
Just keep a "lastActivity" variable around and update it each time through.
For more help with jGNE filters, check for the various snippets and the
project called "jGNE Helper" in the archives about the Internet.
-Randall
--hvoth@cln.etc.bc.ca
+++++++++++++++++++++++++++
>From gurgle@apple.com (Pete Gontier)
Date: Tue, 13 Feb 1996 15:50:50 -0800
Organization: Apple Computer, Inc.
In article <4fc9h7$mbb@vixen.cso.uiuc.edu>,
jhoos@orion.math.uiuc.edu (Jason Hoos) wrote:
> Is there some simple way to tell from within C how long a Mac has
> been idle for?
No. That was easy. :-)
> If not, what's the complicated way? :)
I recommend something based on jGNEFilter. See my personal web pages for a
sample. The tricky part is defining "idle". If the Mac is sorting a large
database over a network (a lengthy, slow operation) and the user goes away
to get coffee, how do you know? Patch File Manager? Ugh. There are
probably 100 other cases to handle, too.
You haven't mentioned why you need to know this, but one way to leverage
somebody else's work is to write an AfterDark module.
- ---------
Pete Gontier, Integer Poet, Apple Macintosh Developer Technical Support
work mail <mailto:gurgle@apple.com>
personal mail <mailto:gurgle@ccnet.com>
personal web <http://www.ccnet.com/~gurgle>
work web <http://dev.info.apple.com/dts.html>
---------------------------
>From marka@ee470.ee.mcgill.ca (Mark Aran Aiken)
Subject: KanjiTalk ignores GNEFilters?
Date: 1 Feb 1996 08:09:25 GMT
Organization: McGill University, Undergraduate EE Lab
Hello all,
I'm collaborating with this guy to localize a shareware app of
mine to Japanese, and I noticed something very disconcerting.
When running under KanjiTalk 7.5.2, if one is using a Japanese
script, a jGNEFilter I install never gets to see keystrokes. If an app
calls WNE, they get handed a keyDown event, but the System seems to
manufacture it from the intermediate input window without posting it
to the event queue.
Can someone else confirm this? IM:Text (Which talks about the Text
Services) doesn't mention this, but then again, I haven't been able to
find jGNEFilters mentioned officially in any of the IM volumes.
Am I stuck patching WNE and peeking at the results the app is
about to get for KanjiTalk?
Mark
--
-----------------------------------------------------------------------------
| Mark A. Aiken Macintosh wizard and shareware author|
| Undergrad, EE, McGill U, Mtl, CANADA marka@kagi.com / marka@ee.mcgill.ca |
| WWW site of Macintosh shareware at http://www.kagi.com/authors/marka |
| General WWW home page at http://www.ee.mcgill.ca/~marka |
-----------------------------------------------------------------------------
+++++++++++++++++++++++++++
>From gurgle@dnai.com (Pete Gontier)
Date: Sat, 03 Feb 1996 12:39:05 -0800
Organization: Cellular
In article <4epsfl$m3g@sifon.cc.mcgill.ca>,
marka@ee470.ee.mcgill.ca (Mark Aran Aiken) wrote:
> I haven't been able to
> find jGNEFilters mentioned officially in any of the IM volumes.
It's documented in IM I very very briefly and also:
<URL:http://dev.info.apple.com/technotes/
Archive/Toolbox/tb_11.html>
> Am I stuck patching WNE and peeking at the results the app is
> about to get for KanjiTalk?
I'm not familiar with any KanjiTalk problem. Copying this to myself for
bug report searching when I get back to work.
- -----------------------------
Pete Gontier -- Apple Macintosh Developer Technical Support
<URL:mailto:gurgle@dnai.com> -- <URL:http://www.dnai.com/~gurgle>
+++++++++++++++++++++++++++
>From Matt Slot <fprefect@umich.edu>
Date: 5 Feb 1996 05:42:11 GMT
Organization: University of Michigan
Mark Aran Aiken, marka@ee470.ee.mcgill.ca writes:
> When running under KanjiTalk 7.5.2, if one is using a Japanese
> script, a jGNEFilter I install never gets to see keystrokes.
WorldScript bypasses the jGNE mechanism when reporting "keystrokes", since
keyboard input is often emulated by Inline Input windows. This means that
systems since 7.1 are susceptible... and patching _GetNextEvent may be your
only option. (WNE calls GNE, but recall that GNE is reentrant across
contexts.)
Pete Gontier, gurgle@dnai.com writes:
> I'm not familiar with any KanjiTalk problem. Copying this to myself for
> bug report searching when I get back to work.
I don't know if/where this is documented, but it certainly has been around
for a while. With the "tenative" future of the jGNE mechanism, I don't think
there are plans to fix the problems with it.
Besides, the "missing clicks" bug has been around since 7.0, and no one is
rushing to fix (or document) that.
Matt
(not as bitter as he sounds...)
* * * * * * * * * * * * * * * * * * * * * * * * * * ======================
* Reality: Matt Slot * Time is an illusion.
* E-Mail: mailto:fprefect@umich.edu * Lunchtime doubly so.
* Web: http://www.sils.umich.edu/~fprefect/ * -- Douglas Adams
* * * * * * * * * * * * * * * * * * * * * * * * * * ======================
+++++++++++++++++++++++++++
>From gurgle@apple.com (Pete Gontier)
Date: Tue, 13 Feb 1996 18:00:57 -0800
Organization: Apple Computer, Inc.
In article <4f45bj$4mh@srvr1.engin.umich.edu>,
Matt Slot <fprefect@umich.edu> wrote:
> Pete Gontier, gurgle@dnai.com writes:
> > I'm not familiar with any KanjiTalk problem. Copying this to myself for
> > bug report searching when I get back to work.
>
> I don't know if/where this is documented, but it certainly has been around
> for a while. With the "tenative" future of the jGNE mechanism, I don't think
> there are plans to fix the problems with it.
Yep. I found a bug in the database, and it's still open.
---
Pete Gontier, Integer Poet, Apple Macintosh Developer Technical Support
work mail <mailto:gurgle@apple.com>
personal mail <mailto:gurgle@ccnet.com>
personal web <http://www.ccnet.com/~gurgle>
work web <http://dev.info.apple.com/dts.html>
---------------------------
>From "Patrick C. Beard" <beard@basilsoft.com>
Subject: [ANN] GC 4.9 for MacOS
Date: 14 Feb 1996 19:27:07 GMT
Organization: BasilSoft
The MacOS port of Version 4.9 of the Boehm-Demers-Weiser conservative
garbage collector for C and C++, is now available. This collector is
compatible with Symantec's THINK C/C++ (68K only), as well as
Metrowerks CW8 (68K & PowerPC).
This version no longer requires the use of datastart.c and dataend.c.
The collector now uses linker generated variables to locate global
data. There is also limited support for using the collector with shared
libraries.
Version 4.9 also contains miscellaneous bug fixes in the OS independent
portions of the collector.
The new version is available at:
ftp://ftp.bdt.com/home/beard/gc/gc-4.9.sit.hqx
---------------------------
>From smmcdowe@undergrad.math.uwaterloo.ca (Sean McDowell)
Subject: [ANN] Visit Mac Games Programmers' Bitstop!
Date: Tue, 13 Feb 1996 03:58:51 GMT
Organization: University of Waterloo
I'd like to welcome you all over to my little corner of the Web, the Mac
Games Programmers' Bitstop. It's an organized, annotated list of internet
resources for us Mac games programmers.
I've added a few nifty sites, more will come when midterms are over :-(.
Drop me a note if you have any comments (it's lonely out here!) and enjoy
your visit: http://www.undergrad.math.uwaterloo.ca/~smmcdowe/Bitstop.html.
Sean
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Sean McDowell "We should not let ourselves be burnt for
University of Waterloo our opinions: we are not that sure of them.
http://www.undergrad.math. But perhaps for this: that we may have and
uwaterloo.ca/~smmcdowe change our opinions." -- Nietzsche
---------------------------
End of C.S.M.P. Digest
**********************